package dssd.modelo;

import java.util.Date;

import dssd.constantes.Constantes;

public abstract class Solicitud {

	protected Long id;
	protected Date fechaSolicitud;
	protected EvaluacionVial evaluacionVial;
	protected ExamenManejo examenManejo;
	protected Licencia licencia;
	protected Conductor conductor;
	
		
	public Solicitud(Date fechaSolicitud, EvaluacionVial evaluacionVial, ExamenManejo examenManejo, Conductor conductor) {
		super();
		this.fechaSolicitud = fechaSolicitud;
		this.evaluacionVial = evaluacionVial;
		this.examenManejo = examenManejo;
		this.conductor = conductor;
		this.licencia = null;
		conductor.agregarSolicitud(this);
	}

	public Long getId() {
		return id;
	}

	public void setId(Long idSolicitud) {
		this.id = idSolicitud;
	}	
	public void setFechaSolicitud(Date fechaSolicitud) {
		this.fechaSolicitud = fechaSolicitud;
	}
	
	public Date getFechaSolicitud() {
		return fechaSolicitud;
	}

	public void setEvaluacionVial(EvaluacionVial evaluacionVial) {
		this.evaluacionVial = evaluacionVial;
	}

	public EvaluacionVial getEvaluacionVial() {
		return evaluacionVial;
	}

	public void setExamenManejo(ExamenManejo examenManejo) {
		this.examenManejo = examenManejo;
	}

	public ExamenManejo getExamenManejo() {
		return examenManejo;
	}

	public void setLicencia(Licencia licencia) {
		this.licencia = licencia;
	}

	public Licencia getLicencia() {
		return licencia;
	}

	public void setConductor(Conductor conductor) {
		this.conductor = conductor;
	}

	public Conductor getConductor() {
		return conductor;
	}
	public Solicitud(){
	}
	public abstract boolean isPendiente();
		
	public abstract boolean estaPendienteDeEvaluacion();
	
	
	public void agregarExamen(ExamenManejo examenManejo) {
		this.setExamenManejo(examenManejo);
	}	

	public void agregarExamen(EvaluacionVial evaluacionVial) {
		this.setEvaluacionVial(evaluacionVial);
	}

	public boolean aprobadaSinLicencia() {
		
		return 	((this.getEvaluacionVial() == null)||
					((this.getEvaluacionVial().getResultado() != null)&&this.getEvaluacionVial().getResultado().equalsIgnoreCase(Constantes.APROBADO)))&&
				((this.getExamenManejo() == null)||
					((this.getExamenManejo().getResultado() != null)&&this.getExamenManejo().getResultado().equalsIgnoreCase(Constantes.APROBADO)))&&
				(this.getLicencia()==null);
	}
	
	public boolean isVigente(){
		return this.getLicencia().getFechaVencimiento().after(new Date());
	}
	
	public abstract String getTipo();
	
	public abstract boolean esDesaprovada();
	public abstract boolean pendienteDeExamen();
	
}
